﻿using System;
using System.Collections.Generic;
using System.Data;
using System.Linq;
using System.Reflection;
using System.Resources;
using System.Text;
using EFDataModel.Enums;

namespace EFDataModel
{
    public partial class EFCategory : IComparable
    {
        #region Static
        #endregion

        #region Member
        /// <summary>
        /// Gibt den passenden CategoryType zurück
        /// </summary>
        public EFCategoryTypes EFCategoryType
        {
            get { return (EFCategoryTypes) Enum.Parse(typeof (EFCategoryTypes), CategoryTypeId.ToString()); }    
            set { CategoryTypeId = (int) value; }
        }

        /// <summary>
        /// Gibt die ModulId zurück die der jeweiligen Kategorie zugeordnet ist.
        /// </summary>
        public EFModules EFModule
        {
            get { return (EFModules) Enum.Parse(typeof (EFModules), ModuleId.HasValue ? ModuleId.Value.ToString() : EFModules.None.ToString()); }
            set { ModuleId = (int) value; }
        }
        #endregion

        #region Public functions
        /// <summary>
        /// Vergleicht die aktuelle Instanz mit einem anderen Objekt vom selben Typ und gibt eine ganze Zahl zurück, die angibt, ob die aktuelle Instanz in der Sortierreihenfolge vor oder nach dem anderen Objekt oder an derselben Position auftritt.
        /// </summary>
        /// <returns>
        /// Ein Wert, der die relative Reihenfolge der verglichenen Objekte angibt.Der Rückgabewert hat folgende Bedeutung:Wert Bedeutung Kleiner als 0 Diese Instanz ist kleiner als <paramref name="obj"/>. 0 Diese Instanz ist gleich <paramref name="obj"/>. Größer als 0 Diese Instanz ist größer als <paramref name="obj"/>. 
        /// </returns>
        /// <param name="obj">Ein Objekt, das mit dieser Instanz verglichen werden soll. </param><exception cref="T:System.ArgumentException"><paramref name="obj"/> hat nicht denselben Typ wie diese Instanz. </exception><filterpriority>2</filterpriority>
        public int CompareTo(object obj)
        {
            //Zwei KategorieObjekte werden anhand Ihres Namens unterschieden. Hier muss nur aufgepasst werden, wenn das System mal Mehrsprachig umgesetzt wird.
            if (obj.GetType().BaseType == typeof(EFCategory))
            {
                EFCategory efCategory = obj as EFCategory;
                return string.Compare(efCategory.Name, this.Name);
            }

            return 0;
        }

        /// <summary>
        /// Den passenden Modulnamen zu dem die Kategorie gehört zurückgegeben 
        /// </summary>
        public string GetModuleName()
        {
            return EFBase.GetModuleName(EFModule);
        }
        #endregion
    }
}
